package com.lkd.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lkd.dto.SkuDto;
import com.lkd.entity.Sku;
import com.lkd.entity.SkuClass;
import com.lkd.mapper.SkuClassMapper;
import com.lkd.mapper.SkuMapper;
import com.lkd.service.ISkuService;
import com.lkd.vo.PageBean;
import com.lkd.vo.SkuVo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 商品表 服务实现类
 * </p>
 *
 * @author xiaotao
 * @since 2025-10-10
 */
@Service
@RequiredArgsConstructor
public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuService {

    private final SkuClassMapper skuClassMapper;

    /**
     * 商品搜索
     *
     * @param skuDto
     * @return
     */
    @Override
    public PageBean<SkuVo> search(SkuDto skuDto) {
        //1.设置分页参数
        Page<Sku> skuPage = new Page<>(skuDto.getPageIndex(), skuDto.getPageSize());

        //2.设置业务参数
        LambdaQueryWrapper<Sku> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(skuDto.getSkuName()), Sku::getSkuName, skuDto.getSkuName());

        //3.执行分页查询
        Page<Sku> page = this.page(skuPage, wrapper);

        //4.获取到page中当前页集合，遍历集合获取到其中的每个商品

        List<SkuVo> skuVoList = page.getRecords().stream().map(sku -> {
            SkuVo skuVo = new SkuVo();
            BeanUtil.copyProperties(sku, skuVo);
            SkuClass skuClass = skuClassMapper.selectById(sku.getClassId());
            skuVo.setSkuClass(skuClass);
            return skuVo;
        }).collect(Collectors.toList());

        //5.构造返回结果
        return new PageBean<>((int)page.getCurrent(), (int)page.getSize(), page.getPages(), page.getTotal(), skuVoList);
    }
}
